// 封装 ajax函数
// 参数1 请求的url地址
// 参数2 请求的方式 默认值是 get方式
// 参数3 请求携带的参数数据 默认值 是 空字符串
// 参数4 请求结束并且成功 执行的函数程序
function myAjax( url , type = 'get' , data = '' ,  callback = function(){} ){
    // 1, 创建 ajax对象
    const xhr = new XMLHttpRequest() ; 

    // 2, 设定 open() 
    // get方式 参数1 是 get 参数2 是 url请求地址 可以携带参数
    // post方式 参数1 是 post 参数2 是 url请求地址

    // 3, 如果是 post方式 设定 请求头格式

    // 4, 设定 send()
    // 如果是 get方式 直接设定send
    // 如果是 post方式 send() 可以携带参数
    if( type.toLowerCase() === 'get' ){
        // 请求方式是 get 
        xhr.open( 'get' , `${url}?${data}` );
        xhr.send();

    }else{
        // 请求方式是 post
        xhr.open( 'post' , url );
        xhr.setRequestHeader( 'Content-Type' , 'application/x-www-form-urlencoded' );
        xhr.send( data );
    }

    // 4, 接收结果
    xhr.onload = function(){
        // 如果 ajax状态码是4 http状态码是200-299 证明请求结束并且成功
        // if( xhr.readyState === 4 && ( xhr.status >= 200 && xhr.status <= 299 ) ){
        if( xhr.readyState === 4 && /^2\d{2}$/.test( xhr.status ) ){
            // 调用参数4 对应的函数 
            // 同时 输入 响应体作为实际的参数数据
            callback( xhr.response ) ; 
        }
    }

}

// 封装 通过 promise执行的 ajax请求
function myPromiseAjax(url , type = 'get' , data = {} , dataType = 'text' ){
    // 创建一个promise对象
    const p = new Promise(function(f,r){
        // 执行异步ajax请求
        $.ajax({
            url: url,
            type: type,
            data: data,
            dataType: dataType,
            success: function(res){ f(res) },
            error: function(res){ r(res) },
        })
    });


    // return promise对象
    return p ;
}
